jQuery && (function ($) {
    $.tooltip = function(){
        $('body').tooltip('<div id="tooltip" style="padding:0 5px; color:#fff; background:#000;opacity:0.65;-moz-opacity:0.65;_filter:alpha(opacity=65);"></div>');
    };
    $.fn.tooltip = function(wrapper) {
        wrapper = $(wrapper || '<div id="tooltip"></div>');
        var self = this, wrapid = wrapper.attr('id'), cache;
        var deltaX = 9, deltaY = 12;
        // 容器不存在，添加到指定位置
        if (!$('#' + wrapid).is('[id=' + wrapid + ']')) self.append(wrapper);
        if (wrapper.css('position') != 'absolute') wrapper.css('position', 'absolute');

        $('[tooltip],[title]', this).live('mousemove', function(e) {
            if (cache != e.target) {
                cache = e.target; var elem = $(this);
                var maxIndex = $('*').maxIndex(); maxIndex = maxIndex==0 ? 1 : maxIndex;
                var wrapIndex = wrapper.css('z-index');
                    wrapIndex = isNaN(parseInt(wrapIndex)) ? 0 : wrapIndex;
                if (maxIndex > wrapIndex) wrapper.css('z-index', maxIndex + 1);
                // title 存在，替换为 tooltip
                if (elem.is('[title]')) {
                    var title = elem.attr('title'); elem.removeAttr('title'); elem.attr('tooltip', title);
                }
                wrapper.css('width', 'auto').show().html(elem.attr('tooltip')).width(wrapper.width()+1);
            }
            var position = {
                X: e.pageX + deltaX,
                Y: e.pageY + deltaY
            };
            // 水平位置
            if (e.clientX + wrapper.width() + deltaX + 10 > $(window).width()) {
                position.X = e.pageX - (wrapper.width() + deltaX + 2);
            }
            // 垂直位置
            if (e.clientY + wrapper.height() + deltaY + 2 > $(window).height()) {
                position.Y = e.pageY - (wrapper.height() + deltaY + 2);
            }
            wrapper.css({display:'block', left:position.X, top:position.Y});
        });

        $('[tooltip],[title]', this).live('mouseleave', function(e) {
            wrapper.hide();
        });
    }
})(jQuery);
